package com.kob.backend.consumer.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Player {
    private Integer id;//用户id
    private Integer botId;
    private String botCode;
    private Integer sx;//初始横坐标
    private Integer sy;//初始纵坐标
    private List<Integer> steps;//每次走过的方向的序列

    private boolean check_tail_increasing(int step) {  // 检验当前回合，蛇的长度是否增加
        if (step <= 10) return true;
        return step % 3 == 1;
    }

    public List<Cell> getCells() {
        List<Cell> res = new ArrayList<>();//这里面都是蛇的身体
        int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
        int x = sx, y = sy;//拿到起点
        int step = 0;
        res.add(new Cell(x, y));//加入起点
        for (int d: steps) {//遍历方向（都是从起点开始长身体）
            x += dx[d];
            y += dy[d];//变头
            res.add(new Cell(x, y));//加新头
            if (!check_tail_increasing( ++ step)) {//先+1，再判断是否增加长度
                res.remove(0);//删除蛇尾，索引为0的元素
            }
        }
        return res;//返回身体
    }

    public String getStepsString() {//把方向序列转换成字符串
        StringBuilder res = new StringBuilder();
        for (int d: steps) {
            res.append(d);
        }
        return res.toString();
    }
}
